OT: .Net a DLLImport

Otázka od: Dalibor

5. 10. 2004 21:35

AHoj,

potreboval bych v .Net naimportovat funkce s jedne DLL.
V Delphi k ni pristupuje pres tenhle kod

type
 HANDLE = Pointer;

    OVR :procedure (SES: HANDLE; sx:Integer; sy:Integer); pascal;

U .NET jsem na to pouzil
[DllImport("test.dll ", EntryPoint="OVR")]
public static extern void OVR(IntPtr ses, int sx, int sy);

Ale pri pouziti procedury OVR mi .Net zahlasi

"An unhandled exception of type 'System.NullReferenceException' occurred in WindowsApplication1.exe
Additional information: Object reference not set to an instance of an object.
"

Zkousel jsem pouzit jeste dalsi parametry DLLImportu jako treba
CallingConvention=CallingConvention.StdCall
Ale marne.

Zjistil jsem, ze pokud ma funkce, ci procedura jeden parametr, tak je to OK,
ale kdyz jich ma vice, tak je prave onen problem.


Prosim HELP.....

Dekuji


Odpovedá: Petr Vones

5. 10. 2004 23:50

From: "Dalibor" <dalibor@torola.cz>
> Zjistil jsem, ze pokud ma funkce, ci procedura jeden parametr, tak je to OK,
> ale kdyz jich ma vice, tak je prave onen problem.

Vypada to ze tuhle volaci konvenci (pascal) P/Invoke nepodporuje. Neni mozne
to v te DLL zmenit na neco normalniho (typicky stdcall) ?

Petr Vones


Odpovedá: Winsoft

5. 10. 2004 23:52

> potreboval bych v .Net naimportovat funkce s jedne DLL.
> V Delphi k ni pristupuje pres tenhle kod
>
> type
> HANDLE = Pointer;
>
> OVR :procedure (SES: HANDLE; sx:Integer; sy:Integer); pascal;

AIK .NET nepodporuje pascal volaciu konvenciu. Ale ked
zmenis poradie parametrov, tak by mala fungoval stdcall konvencia:

[DllImport("test.dll", EntryPoint="OVR",
CallingConvention=CallingConvention.StdCall)]
public static extern void OVR(int sy, int sx, IntPtr ses);

Erik



Odpovedá: Dalibor

6. 10. 2004 8:14

Dekuji, bylo to v poradi tech parametru.

----- Original Message -----
From: "Winsoft" <winsoft@netkosice.sk>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, October 06, 2004 12:26 AM
Subject: Re: .Net a DLLImport


> > potreboval bych v .Net naimportovat funkce s jedne DLL.
> > V Delphi k ni pristupuje pres tenhle kod
> >
> > type
> > HANDLE = Pointer;
> >
> > OVR :procedure (SES: HANDLE; sx:Integer; sy:Integer); pascal;
>
> AIK .NET nepodporuje pascal volaciu konvenciu. Ale ked
> zmenis poradie parametrov, tak by mala fungoval stdcall konvencia:
>
> [DllImport("test.dll", EntryPoint="OVR",
> CallingConvention=CallingConvention.StdCall)]
> public static extern void OVR(int sy, int sx, IntPtr ses);
>
> Erik
>
>
>